home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / aminet / misc / sci / ephem_src_4_28.lha / sel_fld.c < prev    next >
C/C++ Source or Header  |  1992-05-24  |  28KB  |  723 lines

  1. #include <stdio.h>
  2. #include "screen.h"
  3.  
  4. /* define BANG if and only if your system supports the system() function.
  5.  */
  6. #define    BANG
  7.  
  8. /* table of the fields, with flags indicating which menu(s) they are on and
  9.  * whether pickable for changing or plotting.
  10.  * N.B. type must be long enough to hold 16 bits.
  11.  */
  12. typedef unsigned short F_t;
  13. static F_t fields[] = {
  14.     rcfpack (R_ALTM,    C_ALTM,        F_MMNU|F_CHG),
  15.     rcfpack (R_CALLISTO,C_JMX,        F_MNUJ|F_PLT),
  16.     rcfpack (R_CALLISTO,C_JMY,        F_MNUJ|F_PLT),
  17.     rcfpack (R_CALLISTO,C_JMZ,        F_MNUJ|F_PLT),
  18.     rcfpack (R_DAWN,    C_DAWN,        F_MMNU|F_CHG),
  19.     rcfpack (R_DAWN,    C_DAWNV,    F_MMNU|F_PLT),
  20.     rcfpack (R_DUSK,    C_DUSK,        F_MMNU|F_CHG),
  21.     rcfpack (R_DUSK,    C_DUSKV,    F_MMNU|F_PLT),
  22.     rcfpack (R_EPOCH,    C_EPOCHV,    F_MMNU|F_CHG),
  23.     rcfpack (R_EUROPA,    C_JMX,        F_MNUJ|F_PLT),
  24.     rcfpack (R_EUROPA,    C_JMY,        F_MNUJ|F_PLT),
  25.     rcfpack (R_EUROPA,    C_JMZ,        F_MNUJ|F_PLT),
  26.     rcfpack (R_GANYMEDE,C_JMX,        F_MNUJ|F_PLT),
  27.     rcfpack (R_GANYMEDE,C_JMY,        F_MNUJ|F_PLT),
  28.     rcfpack (R_GANYMEDE,C_JMZ,        F_MNUJ|F_PLT),
  29.     rcfpack (R_HEIGHT,    C_HEIGHTV,    F_MMNU|F_CHG|F_PLT),
  30.     rcfpack (R_IO,    C_JMX,        F_MNUJ|F_PLT),
  31.     rcfpack (R_IO,    C_JMY,        F_MNUJ|F_PLT),
  32.     rcfpack (R_IO,    C_JMZ,        F_MNUJ|F_PLT),
  33.     rcfpack (R_JCML,    C_JCMLSI,    F_MNUJ|F_PLT),
  34.     rcfpack (R_JCML,    C_JCMLSII,    F_MNUJ|F_PLT),
  35.     rcfpack (R_JD,    C_JDV,        F_MMNU|F_CHG|F_PLT),
  36.     rcfpack (R_JUPITER,    C_ALT,        F_MNU1|F_PLT),
  37.     rcfpack (R_JUPITER,    C_AZ,        F_MNU1|F_PLT),
  38.     rcfpack (R_JUPITER,    C_CONSTEL,    F_MNU1|F_CHG),
  39.     rcfpack (R_JUPITER,    C_CONSTEL,    F_MNU2|F_CHG),
  40.     rcfpack (R_JUPITER,    C_CONSTEL,    F_MNU3|F_CHG),
  41.     rcfpack (R_JUPITER,    C_DEC,        F_MNU1|F_PLT),
  42.     rcfpack (R_JUPITER,    C_EDIST,    F_MNU1|F_PLT),
  43.     rcfpack (R_JUPITER,    C_ELONG,    F_MNU1|F_PLT),
  44.     rcfpack (R_JUPITER,    C_HLAT,        F_MNU1|F_PLT),
  45.     rcfpack (R_JUPITER,    C_HLONG,    F_MNU1|F_PLT),
  46.     rcfpack (R_JUPITER,    C_MAG,        F_MNU1|F_PLT),
  47.     rcfpack (R_JUPITER,    C_MARS,        F_MNU3|F_PLT),
  48.     rcfpack (R_JUPITER,    C_MERCURY,    F_MNU3|F_PLT),
  49.     rcfpack (R_JUPITER,    C_MOON,        F_MNU3|F_PLT),
  50.     rcfpack (R_JUPITER,    C_NEPTUNE,    F_MNU3|F_PLT),
  51.     rcfpack (R_JUPITER,    C_OBJ,        F_MNU1|F_CHG),
  52.     rcfpack (R_JUPITER,    C_OBJ,        F_MNU2|F_CHG),
  53.     rcfpack (R_JUPITER,    C_OBJ,        F_MNU3|F_CHG),
  54.     rcfpack (R_JUPITER,    C_OBJX,        F_MNU3|F_PLT),
  55.     rcfpack (R_JUPITER,    C_OBJY,        F_MNU3|F_PLT),
  56.     rcfpack (R_JUPITER,    C_PHASE,    F_MNU1|F_PLT),
  57.     rcfpack (R_JUPITER,    C_PLUTO,    F_MNU3|F_PLT),
  58.     rcfpack (R_JUPITER,    C_RA,        F_MNU1|F_PLT),
  59.     rcfpack (R_JUPITER,    C_RISEAZ,    F_MNU2|F_PLT),
  60.     rcfpack (R_JUPITER,    C_RISETM,    F_MNU2|F_PLT),
  61.     rcfpack (R_JUPITER,    C_SATURN,    F_MNU3|F_PLT),
  62.     rcfpack (R_JUPITER,    C_SDIST,    F_MNU1|F_PLT),
  63.     rcfpack (R_JUPITER,    C_SETAZ,    F_MNU2|F_PLT),
  64.     rcfpack (R_JUPITER,    C_SETTM,    F_MNU2|F_PLT),
  65.     rcfpack (R_JUPITER,    C_SIZE,        F_MNU1|F_PLT),
  66.     rcfpack (R_JUPITER,    C_SUN,        F_MNU3|F_PLT),
  67.     rcfpack (R_JUPITER,    C_TRANSALT,    F_MNU2|F_PLT),
  68.     rcfpack (R_JUPITER,    C_TRANSTM,    F_MNU2|F_PLT),
  69.     rcfpack (R_JUPITER,    C_TUP,        F_MNU2|F_PLT),
  70.     rcfpack (R_JUPITER,    C_URANUS,    F_MNU3|F_PLT),
  71.     rcfpack (R_JUPITER,    C_VENUS,    F_MNU3|F_PLT),
  72.     rcfpack (R_JUPITER,    C_XTRA,        F_MNU1|F_CHG),
  73.     rcfpack (R_JUPITER,    C_XTRA,        F_MNU2|F_CHG),
  74.     rcfpack (R_JUPITER,    C_XTRA,        F_MNU3|F_CHG),
  75.     rcfpack (R_LAT,    C_LATV,        F_MMNU|F_CHG|F_PLT),
  76.     rcfpack (R_LD,    C_LD,        F_MMNU|F_PLT|F_CHG),
  77.     rcfpack (R_LISTING,    C_LISTING,    F_MMNU|F_CHG),
  78.     rcfpack (R_LON,    C_LON,        F_MMNU|F_CHG),
  79.     rcfpack (R_LON,    C_LONV,        F_MMNU|F_PLT),
  80.     rcfpack (R_LONG,    C_LONGV,    F_MMNU|F_CHG|F_PLT),
  81.     rcfpack (R_LST,    C_LSTV,        F_MMNU|F_CHG|F_PLT),
  82.     rcfpack (R_LT,    C_LT,        F_MMNU|F_CHG|F_PLT),
  83.     rcfpack (R_MARS,    C_ALT,        F_MNU1|F_PLT),
  84.     rcfpack (R_MARS,    C_AZ,        F_MNU1|F_PLT),
  85.     rcfpack (R_MARS,    C_CONSTEL,    F_MNU1|F_CHG),
  86.     rcfpack (R_MARS,    C_CONSTEL,    F_MNU2|F_CHG),
  87.     rcfpack (R_MARS,    C_CONSTEL,    F_MNU3|F_CHG),
  88.     rcfpack (R_MARS,    C_DEC,        F_MNU1|F_PLT),
  89.     rcfpack (R_MARS,    C_EDIST,    F_MNU1|F_PLT),
  90.     rcfpack (R_MARS,    C_ELONG,    F_MNU1|F_PLT),
  91.     rcfpack (R_MARS,    C_HLAT,        F_MNU1|F_PLT),
  92.     rcfpack (R_MARS,    C_HLONG,    F_MNU1|F_PLT),
  93.     rcfpack (R_MARS,    C_JUPITER,    F_MNU3|F_PLT),
  94.     rcfpack (R_MARS,    C_MAG,        F_MNU1|F_PLT),
  95.     rcfpack (R_MARS,    C_MERCURY,    F_MNU3|F_PLT),
  96.     rcfpack (R_MARS,    C_MOON,        F_MNU3|F_PLT),
  97.     rcfpack (R_MARS,    C_NEPTUNE,    F_MNU3|F_PLT),
  98.     rcfpack (R_MARS,    C_OBJ,        F_MNU1|F_CHG),
  99.     rcfpack (R_MARS,    C_OBJ,        F_MNU2|F_CHG),
  100.     rcfpack (R_MARS,    C_OBJ,        F_MNU3|F_CHG),
  101.     rcfpack (R_MARS,    C_OBJX,        F_MNU3|F_PLT),
  102.     rcfpack (R_MARS,    C_OBJY,        F_MNU3|F_PLT),
  103.     rcfpack (R_MARS,    C_PHASE,    F_MNU1|F_PLT),
  104.     rcfpack (R_MARS,    C_PLUTO,    F_MNU3|F_PLT),
  105.     rcfpack (R_MARS,    C_RA,        F_MNU1|F_PLT),
  106.     rcfpack (R_MARS,    C_RISEAZ,    F_MNU2|F_PLT),
  107.     rcfpack (R_MARS,    C_RISETM,    F_MNU2|F_PLT),
  108.     rcfpack (R_MARS,    C_SATURN,    F_MNU3|F_PLT),
  109.     rcfpack (R_MARS,    C_SDIST,    F_MNU1|F_PLT),
  110.     rcfpack (R_MARS,    C_SETAZ,    F_MNU2|F_PLT),
  111.     rcfpack (R_MARS,    C_SETTM,    F_MNU2|F_PLT),
  112.     rcfpack (R_MARS,    C_SIZE,        F_MNU1|F_PLT),
  113.     rcfpack (R_MARS,    C_SUN,        F_MNU3|F_PLT),
  114.     rcfpack (R_MARS,    C_TRANSALT,    F_MNU2|F_PLT),
  115.     rcfpack (R_MARS,    C_TRANSTM,    F_MNU2|F_PLT),
  116.     rcfpack (R_MARS,    C_TUP,        F_MNU2|F_PLT),
  117.     rcfpack (R_MARS,    C_URANUS,    F_MNU3|F_PLT),
  118.     rcfpack (R_MARS,    C_VENUS,    F_MNU3|F_PLT),
  119.     rcfpack (R_MERCURY,    C_ALT,        F_MNU1|F_PLT),
  120.     rcfpack (R_MERCURY,    C_AZ,        F_MNU1|F_PLT),
  121.     rcfpack (R_MERCURY,    C_CONSTEL,    F_MNU1|F_CHG),
  122.     rcfpack (R_MERCURY,    C_CONSTEL,    F_MNU2|F_CHG),
  123.     rcfpack (R_MERCURY,    C_CONSTEL,    F_MNU3|F_CHG),
  124.     rcfpack (R_MERCURY,    C_DEC,        F_MNU1|F_PLT),
  125.     rcfpack (R_MERCURY,    C_EDIST,    F_MNU1|F_PLT),
  126.     rcfpack (R_MERCURY,    C_ELONG,    F_MNU1|F_PLT),
  127.     rcfpack (R_MERCURY,    C_HLAT,        F_MNU1|F_PLT),
  128.     rcfpack (R_MERCURY,    C_HLONG,    F_MNU1|F_PLT),
  129.     rcfpack (R_MERCURY,    C_JUPITER,    F_MNU3|F_PLT),
  130.     rcfpack (R_MERCURY,    C_MAG,        F_MNU1|F_PLT),
  131.     rcfpack (R_MERCURY,    C_MARS,        F_MNU3|F_PLT),
  132.     rcfpack (R_MERCURY,    C_MOON,        F_MNU3|F_PLT),
  133.     rcfpack (R_MERCURY,    C_NEPTUNE,    F_MNU3|F_PLT),
  134.     rcfpack (R_MERCURY,    C_OBJ,        F_MNU1|F_CHG),
  135.     rcfpack (R_MERCURY,    C_OBJ,        F_MNU2|F_CHG),
  136.     rcfpack (R_MERCURY,    C_OBJ,        F_MNU3|F_CHG),
  137.     rcfpack (R_MERCURY,    C_OBJX,        F_MNU3|F_PLT),
  138.     rcfpack (R_MERCURY,    C_OBJY,        F_MNU3|F_PLT),
  139.     rcfpack (R_MERCURY,    C_PHASE,    F_MNU1|F_PLT),
  140.     rcfpack (R_MERCURY,    C_PLUTO,    F_MNU3|F_PLT),
  141.     rcfpack (R_MERCURY,    C_RA,        F_MNU1|F_PLT),
  142.     rcfpack (R_MERCURY,    C_RISEAZ,    F_MNU2|F_PLT),
  143.     rcfpack (R_MERCURY,    C_RISETM,    F_MNU2|F_PLT),
  144.     rcfpack (R_MERCURY,    C_SATURN,    F_MNU3|F_PLT),
  145.     rcfpack (R_MERCURY,    C_SDIST,    F_MNU1|F_PLT),
  146.     rcfpack (R_MERCURY,    C_SETAZ,    F_MNU2|F_PLT),
  147.     rcfpack (R_MERCURY,    C_SETTM,    F_MNU2|F_PLT),
  148.     rcfpack (R_MERCURY,    C_SIZE,        F_MNU1|F_PLT),
  149.     rcfpack (R_MERCURY,    C_SUN,        F_MNU3|F_PLT),
  150.     rcfpack (R_MERCURY,    C_TRANSALT,    F_MNU2|F_PLT),
  151.     rcfpack (R_MERCURY,    C_TRANSTM,    F_MNU2|F_PLT),
  152.     rcfpack (R_MERCURY,    C_TUP,        F_MNU2|F_PLT),
  153.     rcfpack (R_MERCURY,    C_URANUS,    F_MNU3|F_PLT),
  154.     rcfpack (R_MERCURY,    C_VENUS,    F_MNU3|F_PLT),
  155.     rcfpack (R_MOON,    C_ALT,        F_MNU1|F_PLT),
  156.     rcfpack (R_MOON,    C_AZ,        F_MNU1|F_PLT),
  157.     rcfpack (R_MOON,    C_CONSTEL,    F_MNU1|F_CHG),
  158.     rcfpack (R_MOON,    C_CONSTEL,    F_MNU2|F_CHG),
  159.     rcfpack (R_MOON,    C_CONSTEL,    F_MNU3|F_CHG),
  160.     rcfpack (R_MOON,    C_DEC,        F_MNU1|F_PLT),
  161.     rcfpack (R_MOON,    C_EDIST,    F_MNU1|F_PLT),
  162.     rcfpack (R_MOON,    C_ELONG,    F_MNU1|F_PLT),
  163.     rcfpack (R_MOON,    C_HLAT,        F_MNU1|F_PLT),
  164.     rcfpack (R_MOON,    C_HLONG,    F_MNU1|F_PLT),
  165.     rcfpack (R_MOON,    C_JUPITER,    F_MNU3|F_PLT),
  166.     rcfpack (R_MOON,    C_MAG,        F_MNU1|F_PLT),
  167.     rcfpack (R_MOON,    C_MARS,        F_MNU3|F_PLT),
  168.     rcfpack (R_MOON,    C_MERCURY,    F_MNU3|F_PLT),
  169.     rcfpack (R_MOON,    C_NEPTUNE,    F_MNU3|F_PLT),
  170.     rcfpack (R_MOON,    C_OBJ,        F_MNU1|F_CHG),
  171.     rcfpack (R_MOON,    C_OBJ,        F_MNU2|F_CHG),
  172.     rcfpack (R_MOON,    C_OBJ,        F_MNU3|F_CHG),
  173.     rcfpack (R_MOON,    C_OBJX,        F_MNU3|F_PLT),
  174.     rcfpack (R_MOON,    C_OBJY,        F_MNU3|F_PLT),
  175.     rcfpack (R_MOON,    C_PHASE,    F_MNU1|F_PLT),
  176.     rcfpack (R_MOON,    C_PLUTO,    F_MNU3|F_PLT),
  177.     rcfpack (R_MOON,    C_RA,        F_MNU1|F_PLT),
  178.     rcfpack (R_MOON,    C_RISEAZ,    F_MNU2|F_PLT),
  179.     rcfpack (R_MOON,    C_RISETM,    F_MNU2|F_PLT),
  180.     rcfpack (R_MOON,    C_SATURN,    F_MNU3|F_PLT),
  181.     rcfpack (R_MOON,    C_SDIST,    F_MNU1|F_PLT),
  182.     rcfpack (R_MOON,    C_SETAZ,    F_MNU2|F_PLT),
  183.     rcfpack (R_MOON,    C_SETTM,    F_MNU2|F_PLT),
  184.     rcfpack (R_MOON,    C_SIZE,        F_MNU1|F_PLT),
  185.     rcfpack (R_MOON,    C_SUN,        F_MNU3|F_PLT),
  186.     rcfpack (R_MOON,    C_TRANSALT,    F_MNU2|F_PLT),
  187.     rcfpack (R_MOON,    C_TRANSTM,    F_MNU2|F_PLT),
  188.     rcfpack (R_MOON,    C_TUP,        F_MNU2|F_PLT),
  189.     rcfpack (R_MOON,    C_URANUS,    F_MNU3|F_PLT),
  190.     rcfpack (R_MOON,    C_VENUS,    F_MNU3|F_PLT),
  191.     rcfpack (R_NEPTUNE,    C_ALT,        F_MNU1|F_PLT),
  192.     rcfpack (R_NEPTUNE,    C_AZ,        F_MNU1|F_PLT),
  193.     rcfpack (R_NEPTUNE,    C_CONSTEL,    F_MNU1|F_CHG),
  194.     rcfpack (R_NEPTUNE,    C_CONSTEL,    F_MNU2|F_CHG),
  195.     rcfpack (R_NEPTUNE,    C_CONSTEL,    F_MNU3|F_CHG),
  196.     rcfpack (R_NEPTUNE,    C_DEC,        F_MNU1|F_PLT),
  197.     rcfpack (R_NEPTUNE,    C_EDIST,    F_MNU1|F_PLT),
  198.     rcfpack (R_NEPTUNE,    C_ELONG,    F_MNU1|F_PLT),
  199.     rcfpack (R_NEPTUNE,    C_HLAT,        F_MNU1|F_PLT),
  200.     rcfpack (R_NEPTUNE,    C_HLONG,    F_MNU1|F_PLT),
  201.     rcfpack (R_NEPTUNE,    C_JUPITER,    F_MNU3|F_PLT),
  202.     rcfpack (R_NEPTUNE,    C_MAG,        F_MNU1|F_PLT),
  203.     rcfpack (R_NEPTUNE,    C_MARS,        F_MNU3|F_PLT),
  204.     rcfpack (R_NEPTUNE,    C_MERCURY,    F_MNU3|F_PLT),
  205.     rcfpack (R_NEPTUNE,    C_MOON,        F_MNU3|F_PLT),
  206.     rcfpack (R_NEPTUNE,    C_OBJ,        F_MNU1|F_CHG),
  207.     rcfpack (R_NEPTUNE,    C_OBJ,        F_MNU2|F_CHG),
  208.     rcfpack (R_NEPTUNE,    C_OBJ,        F_MNU3|F_CHG),
  209.     rcfpack (R_NEPTUNE,    C_OBJX,        F_MNU3|F_PLT),
  210.     rcfpack (R_NEPTUNE,    C_OBJY,        F_MNU3|F_PLT),
  211.     rcfpack (R_NEPTUNE,    C_PHASE,    F_MNU1|F_PLT),
  212.     rcfpack (R_NEPTUNE,    C_PLUTO,    F_MNU3|F_PLT),
  213.     rcfpack (R_NEPTUNE,    C_RA,        F_MNU1|F_PLT),
  214.     rcfpack (R_NEPTUNE,    C_RISEAZ,    F_MNU2|F_PLT),
  215.     rcfpack (R_NEPTUNE,    C_RISETM,    F_MNU2|F_PLT),
  216.     rcfpack (R_NEPTUNE,    C_SATURN,    F_MNU3|F_PLT),
  217.     rcfpack (R_NEPTUNE,    C_SDIST,    F_MNU1|F_PLT),
  218.     rcfpack (R_NEPTUNE,    C_SETAZ,    F_MNU2|F_PLT),
  219.     rcfpack (R_NEPTUNE,    C_SETTM,    F_MNU2|F_PLT),
  220.     rcfpack (R_NEPTUNE,    C_SIZE,        F_MNU1|F_PLT),
  221.     rcfpack (R_NEPTUNE,    C_SUN,        F_MNU3|F_PLT),
  222.     rcfpack (R_NEPTUNE,    C_TRANSALT,    F_MNU2|F_PLT),
  223.     rcfpack (R_NEPTUNE,    C_TRANSTM,    F_MNU2|F_PLT),
  224.     rcfpack (R_NEPTUNE,    C_TUP,        F_MNU2|F_PLT),
  225.     rcfpack (R_NEPTUNE,    C_URANUS,    F_MNU3|F_PLT),
  226.     rcfpack (R_NEPTUNE,    C_VENUS,    F_MNU3|F_PLT),
  227.     rcfpack (R_NSTEP,    C_NSTEPV,    F_MMNU|F_CHG),
  228.     rcfpack (R_OBJX,    C_ALT,        F_MNU1|F_PLT),
  229.     rcfpack (R_OBJX,    C_AZ,        F_MNU1|F_PLT),
  230.     rcfpack (R_OBJX,    C_CONSTEL,    F_MNU1|F_CHG),
  231.     rcfpack (R_OBJX,    C_CONSTEL,    F_MNU2|F_CHG),
  232.     rcfpack (R_OBJX,    C_CONSTEL,    F_MNU3|F_CHG),
  233.     rcfpack (R_OBJX,    C_DEC,        F_MNU1|F_PLT),
  234.     rcfpack (R_OBJX,    C_EDIST,    F_MNU1|F_PLT),
  235.     rcfpack (R_OBJX,    C_ELONG,    F_MNU1|F_PLT),
  236.     rcfpack (R_OBJX,    C_HLAT,        F_MNU1|F_PLT),
  237.     rcfpack (R_OBJX,    C_HLONG,    F_MNU1|F_PLT),
  238.     rcfpack (R_OBJX,    C_JUPITER,    F_MNU3|F_PLT),
  239.     rcfpack (R_OBJX,    C_MAG,        F_MNU1|F_PLT),
  240.     rcfpack (R_OBJX,    C_MARS,        F_MNU3|F_PLT),
  241.     rcfpack (R_OBJX,    C_MERCURY,    F_MNU3|F_PLT),
  242.     rcfpack (R_OBJX,    C_MOON,        F_MNU3|F_PLT),
  243.     rcfpack (R_OBJX,    C_NEPTUNE,    F_MNU3|F_PLT),
  244.     rcfpack (R_OBJX,    C_OBJ,        F_MNU1|F_CHG),
  245.     rcfpack (R_OBJX,    C_OBJ,        F_MNU2|F_CHG),
  246.     rcfpack (R_OBJX,    C_OBJ,        F_MNU3|F_CHG),
  247.     rcfpack (R_OBJX,    C_OBJY,        F_MNU3|F_PLT),
  248.     rcfpack (R_OBJX,    C_PHASE,    F_MNU1|F_PLT),
  249.     rcfpack (R_OBJX,    C_PLUTO,    F_MNU3|F_PLT),
  250.     rcfpack (R_OBJX,    C_RA,        F_MNU1|F_PLT),
  251.     rcfpack (R_OBJX,    C_RISEAZ,    F_MNU2|F_PLT),
  252.     rcfpack (R_OBJX,    C_RISETM,    F_MNU2|F_PLT),
  253.     rcfpack (R_OBJX,    C_SATURN,    F_MNU3|F_PLT),
  254.     rcfpack (R_OBJX,    C_SDIST,    F_MNU1|F_PLT),
  255.     rcfpack (R_OBJX,    C_SETAZ,    F_MNU2|F_PLT),
  256.     rcfpack (R_OBJX,    C_SETTM,    F_MNU2|F_PLT),
  257.     rcfpack (R_OBJX,    C_SIZE,        F_MNU1|F_PLT),
  258.     rcfpack (R_OBJX,    C_SUN,        F_MNU3|F_PLT),
  259.     rcfpack (R_OBJX,    C_TRANSALT,    F_MNU2|F_PLT),
  260.     rcfpack (R_OBJX,    C_TRANSTM,    F_MNU2|F_PLT),
  261.     rcfpack (R_OBJX,    C_TUP,        F_MNU2|F_PLT),
  262.     rcfpack (R_OBJX,    C_URANUS,    F_MNU3|F_PLT),
  263.     rcfpack (R_OBJX,    C_VENUS,    F_MNU3|F_PLT),
  264.     rcfpack (R_OBJY,    C_ALT,        F_MNU1|F_PLT),
  265.     rcfpack (R_OBJY,    C_AZ,        F_MNU1|F_PLT),
  266.     rcfpack (R_OBJY,    C_CONSTEL,    F_MNU1|F_CHG),
  267.     rcfpack (R_OBJY,    C_CONSTEL,    F_MNU2|F_CHG),
  268.     rcfpack (R_OBJY,    C_CONSTEL,    F_MNU3|F_CHG),
  269.     rcfpack (R_OBJY,    C_DEC,        F_MNU1|F_PLT),
  270.     rcfpack (R_OBJY,    C_EDIST,    F_MNU1|F_PLT),
  271.     rcfpack (R_OBJY,    C_ELONG,    F_MNU1|F_PLT),
  272.     rcfpack (R_OBJY,    C_HLAT,        F_MNU1|F_PLT),
  273.     rcfpack (R_OBJY,    C_HLONG,    F_MNU1|F_PLT),
  274.     rcfpack (R_OBJY,    C_JUPITER,    F_MNU3|F_PLT),
  275.     rcfpack (R_OBJY,    C_MAG,        F_MNU1|F_PLT),
  276.     rcfpack (R_OBJY,    C_MARS,        F_MNU3|F_PLT),
  277.     rcfpack (R_OBJY,    C_MERCURY,    F_MNU3|F_PLT),
  278.     rcfpack (R_OBJY,    C_MOON,        F_MNU3|F_PLT),
  279.     rcfpack (R_OBJY,    C_NEPTUNE,    F_MNU3|F_PLT),
  280.     rcfpack (R_OBJY,    C_OBJ,        F_MNU1|F_CHG),
  281.     rcfpack (R_OBJY,    C_OBJ,        F_MNU2|F_CHG),
  282.     rcfpack (R_OBJY,    C_OBJ,        F_MNU3|F_CHG),
  283.     rcfpack (R_OBJY,    C_OBJX,        F_MNU3|F_PLT),
  284.     rcfpack (R_OBJY,    C_PHASE,    F_MNU1|F_PLT),
  285.     rcfpack (R_OBJY,    C_PLUTO,    F_MNU3|F_PLT),
  286.     rcfpack (R_OBJY,    C_RA,        F_MNU1|F_PLT),
  287.     rcfpack (R_OBJY,    C_RISEAZ,    F_MNU2|F_PLT),
  288.     rcfpack (R_OBJY,    C_RISETM,    F_MNU2|F_PLT),
  289.     rcfpack (R_OBJY,    C_SATURN,    F_MNU3|F_PLT),
  290.     rcfpack (R_OBJY,    C_SDIST,    F_MNU1|F_PLT),
  291.     rcfpack (R_OBJY,    C_SETAZ,    F_MNU2|F_PLT),
  292.     rcfpack (R_OBJY,    C_SETTM,    F_MNU2|F_PLT),
  293.     rcfpack (R_OBJY,    C_SIZE,        F_MNU1|F_PLT),
  294.     rcfpack (R_OBJY,    C_SUN,        F_MNU3|F_PLT),
  295.     rcfpack (R_OBJY,    C_TRANSALT,    F_MNU2|F_PLT),
  296.     rcfpack (R_OBJY,    C_TRANSTM,    F_MNU2|F_PLT),
  297.     rcfpack (R_OBJY,    C_TUP,        F_MNU2|F_PLT),
  298.     rcfpack (R_OBJY,    C_URANUS,    F_MNU3|F_PLT),
  299.     rcfpack (R_OBJY,    C_VENUS,    F_MNU3|F_PLT),
  300.     rcfpack (R_PAUSE,    C_PAUSEV,    F_MMNU|F_CHG),
  301.     rcfpack (R_PLOT,    C_PLOT,        F_MMNU|F_CHG),
  302.     rcfpack (R_PLUTO,    C_ALT,        F_MNU1|F_PLT),
  303.     rcfpack (R_PLUTO,    C_AZ,        F_MNU1|F_PLT),
  304.     rcfpack (R_PLUTO,    C_CONSTEL,    F_MNU1|F_CHG),
  305.     rcfpack (R_PLUTO,    C_CONSTEL,    F_MNU2|F_CHG),
  306.     rcfpack (R_PLUTO,    C_CONSTEL,    F_MNU3|F_CHG),
  307.     rcfpack (R_PLUTO,    C_DEC,        F_MNU1|F_PLT),
  308.     rcfpack (R_PLUTO,    C_EDIST,    F_MNU1|F_PLT),
  309.     rcfpack (R_PLUTO,    C_ELONG,    F_MNU1|F_PLT),
  310.     rcfpack (R_PLUTO,    C_HLAT,        F_MNU1|F_PLT),
  311.     rcfpack (R_PLUTO,    C_HLONG,    F_MNU1|F_PLT),
  312.     rcfpack (R_PLUTO,    C_JUPITER,    F_MNU3|F_PLT),
  313.     rcfpack (R_PLUTO,    C_MAG,        F_MNU1|F_PLT),
  314.     rcfpack (R_PLUTO,    C_MARS,        F_MNU3|F_PLT),
  315.     rcfpack (R_PLUTO,    C_MERCURY,    F_MNU3|F_PLT),
  316.     rcfpack (R_PLUTO,    C_MOON,        F_MNU3|F_PLT),
  317.     rcfpack (R_PLUTO,    C_NEPTUNE,    F_MNU3|F_PLT),
  318.     rcfpack (R_PLUTO,    C_OBJ,        F_MNU1|F_CHG),
  319.     rcfpack (R_PLUTO,    C_OBJ,        F_MNU2|F_CHG),
  320.     rcfpack (R_PLUTO,    C_OBJ,        F_MNU3|F_CHG),
  321.     rcfpack (R_PLUTO,    C_OBJX,        F_MNU3|F_PLT),
  322.     rcfpack (R_PLUTO,    C_OBJY,        F_MNU3|F_PLT),
  323.     rcfpack (R_PLUTO,    C_PHASE,    F_MNU1|F_PLT),
  324.     rcfpack (R_PLUTO,    C_RA,        F_MNU1|F_PLT),
  325.     rcfpack (R_PLUTO,    C_RISEAZ,    F_MNU2|F_PLT),
  326.     rcfpack (R_PLUTO,    C_RISETM,    F_MNU2|F_PLT),
  327.     rcfpack (R_PLUTO,    C_SATURN,    F_MNU3|F_PLT),
  328.     rcfpack (R_PLUTO,    C_SDIST,    F_MNU1|F_PLT),
  329.     rcfpack (R_PLUTO,    C_SETAZ,    F_MNU2|F_PLT),
  330.     rcfpack (R_PLUTO,    C_SETTM,    F_MNU2|F_PLT),
  331.     rcfpack (R_PLUTO,    C_SIZE,        F_MNU1|F_PLT),
  332.     rcfpack (R_PLUTO,    C_SUN,        F_MNU3|F_PLT),
  333.     rcfpack (R_PLUTO,    C_TRANSALT,    F_MNU2|F_PLT),
  334.     rcfpack (R_PLUTO,    C_TRANSTM,    F_MNU2|F_PLT),
  335.     rcfpack (R_PLUTO,    C_TUP,        F_MNU2|F_PLT),
  336.     rcfpack (R_PLUTO,    C_URANUS,    F_MNU3|F_PLT),
  337.     rcfpack (R_PLUTO,    C_VENUS,    F_MNU3|F_PLT),
  338.     rcfpack (R_PRES,    C_PRESV,    F_MMNU|F_CHG|F_PLT),
  339.     rcfpack (R_SATURN,    C_ALT,        F_MNU1|F_PLT),
  340.     rcfpack (R_SATURN,    C_AZ,        F_MNU1|F_PLT),
  341.     rcfpack (R_SATURN,    C_CONSTEL,    F_MNU1|F_CHG),
  342.     rcfpack (R_SATURN,    C_CONSTEL,    F_MNU2|F_CHG),
  343.     rcfpack (R_SATURN,    C_CONSTEL,    F_MNU3|F_CHG),
  344.     rcfpack (R_SATURN,    C_DEC,        F_MNU1|F_PLT),
  345.     rcfpack (R_SATURN,    C_EDIST,    F_MNU1|F_PLT),
  346.     rcfpack (R_SATURN,    C_ELONG,    F_MNU1|F_PLT),
  347.     rcfpack (R_SATURN,    C_HLAT,        F_MNU1|F_PLT),
  348.     rcfpack (R_SATURN,    C_HLONG,    F_MNU1|F_PLT),
  349.     rcfpack (R_SATURN,    C_JUPITER,    F_MNU3|F_PLT),
  350.     rcfpack (R_SATURN,    C_MAG,        F_MNU1|F_PLT),
  351.     rcfpack (R_SATURN,    C_MARS,        F_MNU3|F_PLT),
  352.     rcfpack (R_SATURN,    C_MERCURY,    F_MNU3|F_PLT),
  353.     rcfpack (R_SATURN,    C_MOON,        F_MNU3|F_PLT),
  354.     rcfpack (R_SATURN,    C_NEPTUNE,    F_MNU3|F_PLT),
  355.     rcfpack (R_SATURN,    C_OBJ,        F_MNU1|F_CHG),
  356.     rcfpack (R_SATURN,    C_OBJ,        F_MNU2|F_CHG),
  357.     rcfpack (R_SATURN,    C_OBJ,        F_MNU3|F_CHG),
  358.     rcfpack (R_SATURN,    C_OBJX,        F_MNU3|F_PLT),
  359.     rcfpack (R_SATURN,    C_OBJY,        F_MNU3|F_PLT),
  360.     rcfpack (R_SATURN,    C_PHASE,    F_MNU1|F_PLT),
  361.     rcfpack (R_SATURN,    C_PLUTO,    F_MNU3|F_PLT),
  362.     rcfpack (R_SATURN,    C_RA,        F_MNU1|F_PLT),
  363.     rcfpack (R_SATURN,    C_RISEAZ,    F_MNU2|F_PLT),
  364.     rcfpack (R_SATURN,    C_RISETM,    F_MNU2|F_PLT),
  365.     rcfpack (R_SATURN,    C_SDIST,    F_MNU1|F_PLT),
  366.     rcfpack (R_SATURN,    C_SETAZ,    F_MNU2|F_PLT),
  367.     rcfpack (R_SATURN,    C_SETTM,    F_MNU2|F_PLT),
  368.     rcfpack (R_SATURN,    C_SIZE,        F_MNU1|F_PLT),
  369.     rcfpack (R_SATURN,    C_SUN,        F_MNU3|F_PLT),
  370.     rcfpack (R_SATURN,    C_TRANSALT,    F_MNU2|F_PLT),
  371.     rcfpack (R_SATURN,    C_TRANSTM,    F_MNU2|F_PLT),
  372.     rcfpack (R_SATURN,    C_TUP,        F_MNU2|F_PLT),
  373.     rcfpack (R_SATURN,    C_URANUS,    F_MNU3|F_PLT),
  374.     rcfpack (R_SATURN,    C_VENUS,    F_MNU3|F_PLT),
  375.     rcfpack (R_SRCH,    C_SRCH,        F_MMNU|F_CHG|F_PLT),
  376.     rcfpack (R_STPSZ,    C_STPSZV,    F_MMNU|F_CHG),
  377.     rcfpack (R_SUN,    C_ALT,        F_MNU1|F_PLT),
  378.     rcfpack (R_SUN,    C_AZ,        F_MNU1|F_PLT),
  379.     rcfpack (R_SUN,    C_CONSTEL,    F_MNU1|F_CHG),
  380.     rcfpack (R_SUN,    C_CONSTEL,    F_MNU2|F_CHG),
  381.     rcfpack (R_SUN,    C_CONSTEL,    F_MNU3|F_CHG),
  382.     rcfpack (R_SUN,    C_DEC,        F_MNU1|F_PLT),
  383.     rcfpack (R_SUN,    C_EDIST,    F_MNU1|F_PLT),
  384.     rcfpack (R_SUN,    C_HLONG,    F_MNU1|F_PLT),
  385.     rcfpack (R_SUN,    C_JUPITER,    F_MNU3|F_PLT),
  386.     rcfpack (R_SUN,    C_MAG,        F_MNU1|F_PLT),
  387.     rcfpack (R_SUN,    C_MARS,        F_MNU3|F_PLT),
  388.     rcfpack (R_SUN,    C_MERCURY,    F_MNU3|F_PLT),
  389.     rcfpack (R_SUN,    C_MOON,        F_MNU3|F_PLT),
  390.     rcfpack (R_SUN,    C_NEPTUNE,    F_MNU3|F_PLT),
  391.     rcfpack (R_SUN,    C_OBJ,        F_MNU1|F_CHG),
  392.     rcfpack (R_SUN,    C_OBJ,        F_MNU2|F_CHG),
  393.     rcfpack (R_SUN,    C_OBJ,        F_MNU3|F_CHG),
  394.     rcfpack (R_SUN,    C_OBJX,        F_MNU3|F_PLT),
  395.     rcfpack (R_SUN,    C_OBJY,        F_MNU3|F_PLT),
  396.     rcfpack (R_SUN,    C_PLUTO,    F_MNU3|F_PLT),
  397.     rcfpack (R_SUN,    C_RA,        F_MNU1|F_PLT),
  398.     rcfpack (R_SUN,    C_RISEAZ,    F_MNU2|F_PLT),
  399.     rcfpack (R_SUN,    C_RISETM,    F_MNU2|F_PLT),
  400.     rcfpack (R_SUN,    C_SATURN,    F_MNU3|F_PLT),
  401.     rcfpack (R_SUN,    C_SETAZ,    F_MNU2|F_PLT),
  402.     rcfpack (R_SUN,    C_SETTM,    F_MNU2|F_PLT),
  403.     rcfpack (R_SUN,    C_SIZE,        F_MNU1|F_PLT),
  404.     rcfpack (R_SUN,    C_TRANSALT,    F_MNU2|F_PLT),
  405.     rcfpack (R_SUN,    C_TRANSTM,    F_MNU2|F_PLT),
  406.     rcfpack (R_SUN,    C_TUP,        F_MNU2|F_PLT),
  407.     rcfpack (R_SUN,    C_URANUS,    F_MNU3|F_PLT),
  408.     rcfpack (R_SUN,    C_VENUS,    F_MNU3|F_PLT),
  409.     rcfpack (R_TEMP,    C_TEMPV,    F_MMNU|F_CHG|F_PLT),
  410.     rcfpack (R_TZN,    C_TZN,        F_MMNU|F_CHG),
  411.     rcfpack (R_TZONE,    C_TZONEV,    F_MMNU|F_CHG),
  412.     rcfpack (R_UD,    C_UD,        F_MMNU|F_PLT|F_CHG),
  413.     rcfpack (R_URANUS,    C_ALT,        F_MNU1|F_PLT),
  414.     rcfpack (R_URANUS,    C_AZ,        F_MNU1|F_PLT),
  415.     rcfpack (R_URANUS,    C_CONSTEL,    F_MNU1|F_CHG),
  416.     rcfpack (R_URANUS,    C_CONSTEL,    F_MNU2|F_CHG),
  417.     rcfpack (R_URANUS,    C_CONSTEL,    F_MNU3|F_CHG),
  418.     rcfpack (R_URANUS,    C_DEC,        F_MNU1|F_PLT),
  419.     rcfpack (R_URANUS,    C_EDIST,    F_MNU1|F_PLT),
  420.     rcfpack (R_URANUS,    C_ELONG,    F_MNU1|F_PLT),
  421.     rcfpack (R_URANUS,    C_HLAT,        F_MNU1|F_PLT),
  422.     rcfpack (R_URANUS,    C_HLONG,    F_MNU1|F_PLT),
  423.     rcfpack (R_URANUS,    C_JUPITER,    F_MNU3|F_PLT),
  424.     rcfpack (R_URANUS,    C_MAG,        F_MNU1|F_PLT),
  425.     rcfpack (R_URANUS,    C_MARS,        F_MNU3|F_PLT),
  426.     rcfpack (R_URANUS,    C_MERCURY,    F_MNU3|F_PLT),
  427.     rcfpack (R_URANUS,    C_MOON,        F_MNU3|F_PLT),
  428.     rcfpack (R_URANUS,    C_NEPTUNE,    F_MNU3|F_PLT),
  429.     rcfpack (R_URANUS,    C_OBJ,        F_MNU1|F_CHG),
  430.     rcfpack (R_URANUS,    C_OBJ,        F_MNU2|F_CHG),
  431.     rcfpack (R_URANUS,    C_OBJ,        F_MNU3|F_CHG),
  432.     rcfpack (R_URANUS,    C_OBJX,        F_MNU3|F_PLT),
  433.     rcfpack (R_URANUS,    C_OBJY,        F_MNU3|F_PLT),
  434.     rcfpack (R_URANUS,    C_PHASE,    F_MNU1|F_PLT),
  435.     rcfpack (R_URANUS,    C_PLUTO,    F_MNU3|F_PLT),
  436.     rcfpack (R_URANUS,    C_RA,        F_MNU1|F_PLT),
  437.     rcfpack (R_URANUS,    C_RISEAZ,    F_MNU2|F_PLT),
  438.     rcfpack (R_URANUS,    C_RISETM,    F_MNU2|F_PLT),
  439.     rcfpack (R_URANUS,    C_SATURN,    F_MNU3|F_PLT),
  440.     rcfpack (R_URANUS,    C_SDIST,    F_MNU1|F_PLT),
  441.     rcfpack (R_URANUS,    C_SETAZ,    F_MNU2|F_PLT),
  442.     rcfpack (R_URANUS,    C_SETTM,    F_MNU2|F_PLT),
  443.     rcfpack (R_URANUS,    C_SIZE,        F_MNU1|F_PLT),
  444.     rcfpack (R_URANUS,    C_SUN,        F_MNU3|F_PLT),
  445.     rcfpack (R_URANUS,    C_TRANSALT,    F_MNU2|F_PLT),
  446.     rcfpack (R_URANUS,    C_TRANSTM,    F_MNU2|F_PLT),
  447.     rcfpack (R_URANUS,    C_TUP,        F_MNU2|F_PLT),
  448.     rcfpack (R_URANUS,    C_VENUS,    F_MNU3|F_PLT),
  449.     rcfpack (R_UT,    C_UTV,        F_MMNU|F_PLT|F_CHG),
  450.     rcfpack (R_VENUS,    C_ALT,        F_MNU1|F_PLT),
  451.     rcfpack (R_VENUS,    C_AZ,        F_MNU1|F_PLT),
  452.     rcfpack (R_VENUS,    C_CONSTEL,    F_MNU1|F_CHG),
  453.     rcfpack (R_VENUS,    C_CONSTEL,    F_MNU2|F_CHG),
  454.     rcfpack (R_VENUS,    C_CONSTEL,    F_MNU3|F_CHG),
  455.     rcfpack (R_VENUS,    C_DEC,        F_MNU1|F_PLT),
  456.     rcfpack (R_VENUS,    C_EDIST,    F_MNU1|F_PLT),
  457.     rcfpack (R_VENUS,    C_ELONG,    F_MNU1|F_PLT),
  458.     rcfpack (R_VENUS,    C_HLAT,        F_MNU1|F_PLT),
  459.     rcfpack (R_VENUS,    C_HLONG,    F_MNU1|F_PLT),
  460.     rcfpack (R_VENUS,    C_JUPITER,    F_MNU3|F_PLT),
  461.     rcfpack (R_VENUS,    C_MAG,        F_MNU1|F_PLT),
  462.     rcfpack (R_VENUS,    C_MARS,        F_MNU3|F_PLT),
  463.     rcfpack (R_VENUS,    C_MERCURY,    F_MNU3|F_PLT),
  464.     rcfpack (R_VENUS,    C_MOON,        F_MNU3|F_PLT),
  465.     rcfpack (R_VENUS,    C_NEPTUNE,    F_MNU3|F_PLT),
  466.     rcfpack (R_VENUS,    C_OBJ,        F_MNU1|F_CHG),
  467.     rcfpack (R_VENUS,    C_OBJ,        F_MNU2|F_CHG),
  468.     rcfpack (R_VENUS,    C_OBJ,        F_MNU3|F_CHG),
  469.     rcfpack (R_VENUS,    C_OBJX,        F_MNU3|F_PLT),
  470.     rcfpack (R_VENUS,    C_OBJY,        F_MNU3|F_PLT),
  471.     rcfpack (R_VENUS,    C_PHASE,    F_MNU1|F_PLT),
  472.     rcfpack (R_VENUS,    C_PLUTO,    F_MNU3|F_PLT),
  473.     rcfpack (R_VENUS,    C_RA,        F_MNU1|F_PLT),
  474.     rcfpack (R_VENUS,    C_RISEAZ,    F_MNU2|F_PLT),
  475.     rcfpack (R_VENUS,    C_RISETM,    F_MNU2|F_PLT),
  476.     rcfpack (R_VENUS,    C_SATURN,    F_MNU3|F_PLT),
  477.     rcfpack (R_VENUS,    C_SDIST,    F_MNU1|F_PLT),
  478.     rcfpack (R_VENUS,    C_SETAZ,    F_MNU2|F_PLT),
  479.     rcfpack (R_VENUS,    C_SETTM,    F_MNU2|F_PLT),
  480.     rcfpack (R_VENUS,    C_SIZE,        F_MNU1|F_PLT),
  481.     rcfpack (R_VENUS,    C_SUN,        F_MNU3|F_PLT),
  482.     rcfpack (R_VENUS,    C_TRANSALT,    F_MNU2|F_PLT),
  483.     rcfpack (R_VENUS,    C_TRANSTM,    F_MNU2|F_PLT),
  484.     rcfpack (R_VENUS,    C_TUP,        F_MNU2|F_PLT),
  485.     rcfpack (R_VENUS,    C_URANUS,    F_MNU3|F_PLT),
  486.     rcfpack (R_WATCH,    C_WATCH,    F_MMNU|F_CHG),
  487. };
  488. #define    NFIELDS (sizeof(fields)/sizeof(fields[0]))
  489.  
  490. /* let op select a field by moving around and hitting RETURN or SPACE, or
  491.  *   until see END. also allow moving directly to frequently used fields 
  492.  *   with some hot-keys.
  493.  * only allow fields with the given flag mask.
  494.  * return the rcfpack()'d field, or 0 if typed END.
  495.  * N.B. we might also exit() entirely by calling bye() if op types QUIT.
  496.  */
  497. sel_fld (f, flag, prmpt, help)
  498. int f;        /* inital row, col */
  499. int flag;
  500. char *prmpt, *help;
  501. {
  502.     extern void bye();
  503.     int r = unpackr(f), c = unpackc(f);
  504.     char *lastp;
  505.     int ch;
  506.  
  507.     lastp = 0;
  508.     while (1) {
  509.         if (lastp != prmpt) {
  510.         lastp = prmpt;
  511.         f_prompt (lastp);
  512.         }
  513.         c_pos (r, c);
  514.         switch (ch = read_char()) {
  515.         case REDRAW:
  516.         redraw_screen(2);    /* redraw all from scratch */
  517.         lastp = 0;
  518.         break;
  519.         case VERSION:
  520.         version();
  521.         lastp = 0;
  522.         break;
  523.         case HELP:
  524.         f_msg (help);
  525.         lastp = 0;
  526.         break;
  527.         case QUIT:
  528.         f_prompt ("Exit ephem? (y) ");
  529.         if (read_char() == 'y')
  530.             bye();    /* never returns */
  531.         lastp = 0;
  532.         break;
  533. #ifdef BANG
  534.         case '!': {
  535.         char buf[NC];
  536.         f_prompt ("!");
  537.         if (read_line (buf, sizeof(buf)-2) > 0) {
  538.             c_erase();
  539.             byetty();
  540.             (void) system (buf);
  541. #ifdef AMIGA
  542.             cwrite("\nHit any key to resume ephem...");
  543. #else
  544.             printf ("\nHit any key to resume ephem...");
  545. #endif
  546.             (void) read_char();
  547.             redraw_screen(2);    /* redraw all from scratch */
  548.         }
  549.         lastp = 0;
  550.         }
  551.         break;
  552. #endif
  553.         case END:
  554.         return (0);
  555.         case '\r': case ' ':
  556.         return (rcfpack (r, c, 0));
  557.         default:
  558.         move_cur (ch, flag, &r, &c);
  559.         break;
  560.         }
  561.     }
  562. }
  563.  
  564. /* move cursor to next field in given direction: hjkl, or directly to a
  565.  * field, and set *rp and *cp.
  566.  * limit eligible fields to those with given flag mask.
  567.  */
  568. static
  569. move_cur (dirchar, flag, rp, cp)
  570. char dirchar;
  571. int flag;
  572. int *rp, *cp;
  573. {
  574.     int curr = *rp, curc = *cp;
  575.     F_t f, newf, *fp;
  576.     int d, newd;
  577.  
  578.     wrapped:
  579.     newf = 0;
  580.     newd = 1000;
  581.  
  582.     switch (dirchar) {
  583.     case 'h': /* left */
  584.         /* go to next field to the left, or wrap.  */
  585.         for (fp = fields+NFIELDS; --fp >= fields; ) {
  586.         f = *fp;
  587.         if (tstpackf(f,flag) && unpackr(f) == curr) {
  588.             d = curc - unpackc(f);
  589.             if (d > 0 && d < newd) {
  590.             newf = f;
  591.             newd = d;
  592.             }
  593.         }
  594.         }
  595.         if (!newf) {
  596.         curc = NC;
  597.         goto wrapped;
  598.         }
  599.         break;
  600.  
  601.     case 'j': /* down */
  602.         /* go to closest field on next row down with anything on it,
  603.          * or wrap.
  604.          */
  605.         for (fp = fields+NFIELDS; --fp >= fields; ) {
  606.         f = *fp;
  607.         if (tstpackf(f,flag)) {
  608.             d = unpackr(f) - curr;
  609.             if (d > 0 && d < newd) {
  610.             newf = f;
  611.             newd = d;
  612.             }
  613.         }
  614.         }
  615.         if (newf) {
  616.         /* now find the field closest to current col on that row */
  617.         newf = nearestfld (unpackr(newf), curc, flag);
  618.         } else {
  619.         curr = 0;
  620.         goto wrapped;
  621.         }
  622.         break;
  623.  
  624.     case 'k': /* up */
  625.         /* go to closest field on next row up with anything on it, 
  626.          * or wrap.
  627.          */
  628.         for (fp = fields+NFIELDS; --fp >= fields; ) {
  629.         f = *fp;
  630.         if (tstpackf(f,flag)) {
  631.             d = curr - unpackr(f);
  632.             if (d > 0 && d < newd) {
  633.             newf = f;
  634.             newd = d;
  635.             }
  636.         }
  637.         }
  638.         if (newf) {
  639.         /* now find the field closest to current col on that row */
  640.         newf = nearestfld (unpackr(newf), curc, flag);
  641.         } else {
  642.         curr = NR+1;
  643.         goto wrapped;
  644.         }
  645.         break;
  646.  
  647.     case 'l': /* right */
  648.         /* go to next field to the right, or wrap.  */
  649.         for (fp = fields+NFIELDS; --fp >= fields; ) {
  650.         f = *fp;
  651.         if (tstpackf(f,flag) && unpackr(f) == curr) {
  652.             d = unpackc(f) - curc;
  653.             if (d > 0 && d < newd) {
  654.             newf = f;
  655.             newd = d;
  656.             }
  657.         }
  658.         }
  659.         if (!newf) {
  660.         curc = 0;
  661.         goto wrapped;
  662.         }
  663.         break;
  664.  
  665.     /* handy shorthands directly to a given spot.
  666.      * calling nearestfld() automatically allows for which menu
  667.      *   is up now and what is pickable. you can use rcfpack()
  668.      *   directly for top half fields that are always up.
  669.      * N.B. using nearestfld() can be too aggressive. it will try
  670.      *   other fields entirely if one you intend is not eligible.
  671.      */
  672.     case 'S': newf = nearestfld (R_SUN, C_OBJ, flag); break;
  673.     case 'M': newf = nearestfld (R_MOON, C_OBJ, flag); break;
  674.     case 'e': newf = nearestfld (R_MERCURY, C_OBJ, flag); break;
  675.     case 'v': newf = nearestfld (R_VENUS, C_OBJ, flag); break;
  676.     case 'm': newf = nearestfld (R_MARS, C_OBJ, flag); break;
  677.     case 'J': newf = nearestfld (R_JUPITER, C_OBJ, flag); break;
  678.     case 's': newf = nearestfld (R_SATURN, C_OBJ, flag); break;
  679.     case 'u': newf = nearestfld (R_URANUS, C_OBJ, flag); break;
  680.     case 'n': newf = nearestfld (R_NEPTUNE, C_OBJ, flag); break;
  681.     case 'p': newf = nearestfld (R_PLUTO, C_OBJ, flag); break;
  682.     case 'x': newf = nearestfld (R_OBJX, C_OBJ, flag); break;
  683.     case 'y': newf = nearestfld (R_OBJY, C_OBJ, flag); break;
  684.     case 'c': newf = nearestfld (R_ALTM, C_ALTM, flag); break;
  685.     case 'd': newf = nearestfld (R_UD, C_UD, flag); break;
  686.     case 'o': newf = nearestfld (R_EPOCH, C_EPOCHV, flag); break;
  687.     case 'z': newf = nearestfld (R_STPSZ, C_STPSZV, flag); break;
  688.     case 'w': newf = nearestfld (R_WATCH, C_WATCH, flag); break;
  689.     case 'L': newf = nearestfld (R_LISTING, C_LISTING, flag); break;
  690.     }
  691.  
  692.     if (newf) {
  693.         *rp = unpackr(newf);
  694.         *cp = unpackc(newf);
  695.     }
  696. }
  697.  
  698. /* return the nearest field with given flag mask, either way, on this row,
  699.  * else 0 if none.
  700.  */
  701. static int
  702. nearestfld (r, c, flag)
  703. int r, c, flag;
  704. {
  705.     F_t nf, f, *fp;
  706.     int d, d0;
  707.  
  708.     nf = 0;
  709.     d0 = 1000;
  710.  
  711.     for (fp = fields+NFIELDS; --fp >= fields; ) {
  712.         f = *fp;
  713.         if (tstpackf(f,flag) && unpackr(f) == r) {
  714.         d = abs(c - unpackc(f));
  715.         if (d < d0) {
  716.             nf = f;
  717.             d0 = d;
  718.         }
  719.         }
  720.     }
  721.     return (nf);
  722. }
  723.